package com.xbongbong.saas.model;

import com.xbongbong.paas.elasticsearch.pojo.dto.InsertDTO;
import com.xbongbong.paas.enums.IndexTypeEnum;
import com.xbongbong.paas.toolbox.exception.XbbException;
import com.xbongbong.paas.toolbox.wrap.IModel;
import com.xbongbong.pro.domain.entity.UpdateDataEntity;
import com.xbongbong.saas.domain.entity.PayBalanceEntity;
import org.elasticsearch.action.support.WriteRequest;

import java.util.Collection;
import java.util.List;

/**
 * 预付款余额
 *
 * @author 徐俊杰
 * @date 2020/2/24 15:25
 * @since v1.0
 */
public interface PayBalanceModel extends IModel<PayBalanceEntity> {

    /**
     * 通过供应商id获取
     *
     * @param supplierId 供应商id
     * @param corpid 公司id
     * @return com.xbongbong.saas.domain.entity.PayBalanceEntity
     * @throws XbbException 异常
     * @author 徐俊杰
     * @date 2020/2/24 15:26
     * @since v1.0
     */
    PayBalanceEntity getBySupplierId(Long supplierId, String corpid)  throws XbbException;

    /**
     * 通过id获取数据
     *
     * @param id 主键
     * @param corpid 公司id
     * @return com.xbongbong.saas.domain.entity.PayBalanceEntity
     * @throws XbbException 异常
     * @author 徐俊杰
     * @date 2020/2/24 15:28
     * @since v1.0
     */
    PayBalanceEntity getById(Long id, String corpid)  throws XbbException;

    /**
     * 根据供应商IDList获取余额
     *
     * @param supplierId 供应商id
     * @param corpid 公司id
     * @return java.util.List<com.xbongbong.saas.domain.entity.PayBalanceEntity>
     * @throws XbbException 异常
     * @author 徐俊杰
     * @date 2020/2/24 15:29
     * @since v1.0
     */
     List<PayBalanceEntity> getBySupplierIds(Collection<Long> supplierId, String corpid) throws XbbException;

    /**
     * 批量更新金额和时间
     *
     * @param list 数据列表
     * @param corpid 公司id
     * @return java.lang.Integer
     * @throws XbbException 异常
     * @author 徐俊杰
     * @date 2020/2/24 15:30
     * @since v1.0
     */
     Integer updateBatchByCorpidAndSupplierId(List<PayBalanceEntity> list, String corpid) throws XbbException;

     /**
      * 删除预付款余额记录（保证余额=0才能删除）
      *
      * @param idIn 主键集合
      * @param corpid 公司id
      * @return java.lang.Integer
      * @throws XbbException 异常
      * @author 徐俊杰
      * @date 2020/2/24 15:31
      * @since v1.0
      */
     Integer deleteBatch(List<Long> idIn, String corpid) throws XbbException;

     /**
      * 批量删除回滚
      *
      * @param idIn 主键集合
      * @param corpid 公司id
      * @return java.lang.Integer
      * @throws XbbException 异常
      * @author 徐俊杰
      * @date 2020/2/24 15:32
      * @since v1.0
      */
     Integer deleteBatchRollback(List<Long> idIn, String corpid) throws XbbException;

    /**
     * 更新金额和del
     *
     * @param entity 实体
     * @param updateDel 是否更新del
     * @return java.lang.Integer
     * @throws XbbException 异常
     * @author 徐俊杰
     * @date 2020/2/24 15:33
     * @since v1.0
     */
    Integer update(PayBalanceEntity entity, boolean updateDel) throws XbbException;

    /**
     * 批量更新预付款余额：直接重置余额值，只用于脚本
     * @param corpid
     * @param list
     * @throws XbbException
     * @author zcp
     * @since v1.0
     * @version v1.0
     */
    void updateBatchAdvance(String corpid, List<PayBalanceEntity> list) throws XbbException;

    /**
     * 得到更新es的dto
     * @param payBalanceEntity
     * @param indexTypeEnum
     * @return com.xbongbong.paas.elasticsearch.pojo.dto.InsertDTO
     * @throws XbbException
     * @author zcp
     * @since v1.0
     * @version v1.0
     */
    InsertDTO getSaveDTO(PayBalanceEntity payBalanceEntity, IndexTypeEnum indexTypeEnum) throws XbbException;

    Integer updateTime(Long id,String corpid) throws XbbException ;

    /**
     * 批量更新
     * @param list  数据列表
     * @param corpid 公司id
     * @return Integer
     * @throws XbbException XbbException
     */
    Integer updateBatch(List<UpdateDataEntity> list, String corpid) throws XbbException;

    /**
     * 批量更新
     * @param list  数据列表
     * @param corpid 公司id
     * @param refreshPolicy 是否等待
     * @return Integer
     * @throws XbbException XbbException
     */
    Integer updateBatch(List<UpdateDataEntity> list, String corpid, WriteRequest.RefreshPolicy refreshPolicy) throws XbbException;

}
